/**
 * 
 */
package com.demo2do.strawberry.service;

import java.io.Serializable;
import java.util.List;

import com.demo2do.core.web.resolver.Page;
import com.demo2do.strawberry.entity.startup.Startup;
import com.demo2do.strawberry.entity.startup.activity.Discussion;
import com.demo2do.strawberry.entity.startup.activity.Fans;
import com.demo2do.strawberry.entity.startup.activity.Meet;
import com.demo2do.strawberry.entity.startup.activity.Rating;
import com.demo2do.strawberry.entity.startup.category.Region;
import com.demo2do.strawberry.entity.startup.category.Tag;
import com.demo2do.strawberry.entity.startup.fund.FundProgress;
import com.demo2do.strawberry.entity.startup.fund.FundStatus;
import com.demo2do.strawberry.entity.user.profile.Profile;

/**
 * @author Downpour
 */
public interface StartupService {
	
	public List<Startup> list(FundStatus fundStatus);
	
	public List<Startup> list(FundStatus fundStatus, boolean withCurrentWeight);
	
	public List<Startup> list(Page page);
	
	public List<Startup> list(Page page, String name, Long tid, Long rid, Long fsid);
	
	public Startup load(Serializable id);
	
	public List<Tag> loadStartupTags();
	
	public List<Region> loadStartupRegions();
	

	public void createRating(Rating rating, Startup startup, Profile profile);
	
	public List<Rating> getRatings(Page page, Startup startup);
	
	public List<Rating> getLatestRating(Startup startup);
	
	
	public void createDiscussion(Profile profile, Startup startup, Discussion discussion);
	
	public List<Discussion> getDiscussions(Page page, Startup startup);

	public List<Discussion> getLatestDiscussions(Startup startup);
	
	
	public void createMeet(Meet meet, Startup startup, Profile profile);
	
	public List<Meet> getMeets(Page page, Startup startup);
	
	public List<Meet> getLatestMeets(Startup startup);
	
	
	public boolean createFan(Profile profile, Startup startup);
	
	public List<Fans> getFans(Page page, Startup startup);

	public List<Fans> getLatestFans(Startup startup);
	
	public boolean removeFan(Profile profile, Startup startup);
	

	public void increaseViewCount(Startup startup);
	
	public void createFundProgress(FundProgress fundProgress, Profile profile, Startup startup);
}
